#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Created by master on 2017/3/5
class Animal(object):
    def __init__(self, name):
        self.name = name
        self.num = None
        self.__num = 9  # 代表它是一个私有属性 外部无法访问

    hobby = "meat"

    @classmethod  # 把函数变成类中的方法
    def talk(self):  # 在类方法中不能访问实例变量
        print("%s is talking..." % self.hobby)

    @staticmethod  # 静态方法和实例没有任何关系 实例不能调用类中的静态方法
    # 静态方法中不能访问类变量和实例变量 除非在静态方法中传入实例对象
    def walk(self):
        print("%s is walking..." % self.name)

    @property  # property代表这是类的一个属性 不能像方法那样调用 只能 d.habit
    def habit(self):
        print("%s habit is xxoo" % self.name)

    @property
    def total_players(self):
        return self.num

    @total_players.setter  # 修改属性的值
    def total_players(self, num):
        self.__num = num
        print("total players:", self.num)

    @total_players.deleter  # 删除属性的值
    def total_players(self):
        print("total players deleted")
        del self.__num


d = Animal("sanjiang")

# 强行访问私有成员
print(d._Animal__num)

# 类方法只能通过类名.函数()调用

Animal.talk()
# d.talk()
d.walk(d)
d.habit

d.total_players = 10  # 修改值

del d.total_players


